// DbDelete.h
#pragma once

#include <string>
#include "../DbClient/DbClient.h" 
#include "../../generated/common_struct.pb.h"

class DbDelete {
public:
    // 禁止实例化
    DbDelete() = delete;

    /**
     * @brief 在 Neo4j 数据库中根据 ID 删除一个 (:User) 节点及其所有关系。
     * 
     * @param user_id 要删除的用户的ID。
     * @param error_message 如果操作失败，此字符串将包含描述错误的信息。
     * @return bool 如果操作成功则返回 true，失败则返回 false。
     *              注意：即使未找到指定 ID 的节点，操作也视为成功。
     */
    static bool DeleteUser(int32_t user_id, std::string& error_message);

    /**
     * @brief 在 Neo4j 数据库中根据 ID 删除一个 (:List) 节点及其所有关系。
     * 
     * @param list_id 要删除的列表的ID。
     * @param error_message 如果操作失败，此字符串将包含描述错误的信息。
     * @return bool 如果操作成功则返回 true，失败则返回 false。
     *              注意：即使未找到指定 ID 的节点，操作也视为成功。
     */
    static bool DeleteList(int32_t list_id, std::string& error_message);

    /**
     * @brief 在 Neo4j 数据库中根据 ID 删除一个 (:Todo) 节点。
     * 
     * @param todo_id 要删除的待办事项的ID。
     * @param error_message 如果操作失败，此字符串将包含描述错误的信息。
     * @return bool 如果操作成功则返回 true，失败则返回 false。
     *              注意：即使未找到指定 ID 的节点，操作也视为成功。
     */
    static bool DeleteTodo(int32_t todo_id, std::string& error_message);

    /**
     * @brief 在 Neo4j 数据库中根据 ID 删除一个 (:Comment) 节点。
     * 
     * @param comment_id 要删除的评论的ID。
     * @param error_message 如果操作失败，此字符串将包含描述错误的信息。
     * @return bool 如果操作成功则返回 true，失败则返回 false。
     *              注意：即使未找到指定 ID 的节点，操作也视为成功。
     */
    static bool DeleteComment(int32_t comment_id, std::string& error_message);

    /**
     * @brief 在 Neo4j 数据库中根据 ID 删除一个 (:Entity) 节点。
     * 
     * @param entity_id 要删除的实体的ID (字符串类型)。
     * @param error_message 如果操作失败，此字符串将包含描述错误的信息。
     * @return bool 如果操作成功则返回 true，失败则返回 false。
     *              注意：即使未找到指定 ID 的节点，操作也视为成功。
     */
    static bool DeleteEntity(const std::string& entity_id, std::string& error_message);

private:
    // 可以添加一些私有辅助函数来处理通用的 Cypher 构造或参数准备逻辑
};
